package com.cgt.spring.test.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyFactory {
	/**
	 * 给我任何一个目标对象
	 */
	public static Object getProxyInstance(Object target) {
		return Proxy.newProxyInstance(
				target.getClass().getClassLoader(),//目标对象的类加载
				target.getClass().getInterfaces(), //目标对象实现的接口
				new InvocationHandler() { //匿名内部类
					//Object proxy 代理对象
					//Method method 调用的方法
					//Object[] args 调用方法的参数
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						System.out.println("开启事务");
						//调用目标对象方法
						Object returnValue = method.invoke(target, args);
						System.out.println("关闭事务");
						return returnValue;
					}
				}
		);
	}
}
